package cloud.mist.sailonix.utils;

import cloud.mist.sailonix.common.Result;
import cloud.mist.sailonix.common.ResultCode;

/**
 * 响应结果工具类
 * 
 * @author sailonix
 * @since 2024-01-01
 */
public class ResultUtils {

    private ResultUtils() {
        // 工具类，禁止实例化
    }

    /**
     * 成功响应
     */
    public static <T> Result<T> success() {
        return Result.success();
    }

    /**
     * 成功响应，带数据
     */
    public static <T> Result<T> success(T data) {
        return Result.success(data);
    }

    /**
     * 成功响应，自定义消息
     */
    public static <T> Result<T> success(String message) {
        return Result.success(message, null);
    }

    /**
     * 成功响应，自定义消息和数据
     */
    public static <T> Result<T> success(String message, T data) {
        return Result.success(message, data);
    }

    /**
     * 失败响应
     */
    public static <T> Result<T> error() {
        return Result.error();
    }

    /**
     * 失败响应，自定义消息
     */
    public static <T> Result<T> error(String message) {
        return Result.error(message);
    }

    /**
     * 失败响应，指定状态码
     */
    public static <T> Result<T> error(ResultCode resultCode) {
        return Result.error(resultCode);
    }

    /**
     * 失败响应，指定状态码和消息
     */
    public static <T> Result<T> error(Integer code, String message) {
        return Result.error(code, message);
    }

    /**
     * 用户不存在
     */
    public static <T> Result<T> userNotFound() {
        return Result.error(ResultCode.USER_NOT_FOUND);
    }

    /**
     * 用户已存在
     */
    public static <T> Result<T> userAlreadyExists() {
        return Result.error(ResultCode.USER_ALREADY_EXISTS);
    }

    /**
     * 参数校验失败
     */
    public static <T> Result<T> validationError(String message) {
        return Result.error(ResultCode.VALIDATION_ERROR.getCode(), message);
    }

    /**
     * 数据库操作失败
     */
    public static <T> Result<T> databaseError() {
        return Result.error(ResultCode.DATABASE_ERROR);
    }

    /**
     * 系统繁忙
     */
    public static <T> Result<T> systemBusy() {
        return Result.error(ResultCode.SYSTEM_BUSY);
    }
}